<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<style>
  html,body{
    width : 100%;height : 100%; margin: 0;padding: 0;
  }
  #menu{
    width : 100px;
    padding: 10px;
    border : 1px solid #ddd;
    visibility : hidden;
    position : absolute;
  }
</style>
<body id="container">
<div id="menu">
  <a href="javascript:history.back();">后退</a>
  <hr/>
  <a href="javascript:history.back();">前进</a>
</div>
</body>
<script>
  window.oncontextmenu=function(e){
    e.preventDefault();//取消默认的浏览器自带右键
    var evt = window.event || arguments[0];
    var menu=document.getElementById('menu');//获取右键菜单
    var container = document.getElementById('container');//获取区域
    /*获取当前鼠标右键按下后的位置，据此定义菜单显示的位置*/
    var rightedge =container.clientWidth-evt.clientX;
    var bottomedge =container.clientHeight-evt.clientY;
    console.log(container.clientHeight);
    /*如果从鼠标位置到容器右边的空间小于菜单的宽度，就定位菜单的左坐标（Left）为当前鼠标位置向左一个菜单宽度*/
    if (rightedge < menu.offsetWidth){
      menu.style.left = container.scrollLeft + evt.clientX - menu.offsetWidth + "px";
    }else{ /*否则，就定位菜单的左坐标为当前鼠标位置*/
      menu.style.left = container.scrollLeft + evt.clientX + "px";
    }
    /*如果从鼠标位置到容器下边的空间小于菜单的高度，就定位菜单的上坐标（Top）为当前鼠标位置向上一个菜单高度*/
    if(bottomedge < menu.offsetHeight){
      menu.style.top = container.scrollTop + evt.clientY - menu.offsetHeight + "px";
    }else{/*否则，就定位菜单的上坐标为当前鼠标位置*/
      menu.style.top = container.scrollTop + evt.clientY + "px";
    }
    /*设置菜单可见*/
    menu.style.visibility = "visible";
  }

  window.onclick=function(e){//关闭右键菜单
    document.getElementById('menu').style.visibility = 'hidden';　//用户触发click事件就可以关闭了，因为绑定在window上，按事件冒泡处理，不会影响菜单的功能
  }
</script>
</html>
